【Netty】Netty 核心组件 ( ChannelHandlerContext )

您所在的位置:网站首页 netty channel close 【Netty】Netty 核心组件 ( ChannelHandlerContext )

【Netty】Netty 核心组件 ( ChannelHandlerContext )

2024-07-14 20:37:46| 来源: 网络整理| 查看: 265

文章目录一、 ChannelHandlerContext 组件二、 ChannelHandlerContext 组件 debug 调试三、 ChannelHandlerContext 组件 debug 调试结果分析一、 ChannelHandlerContext 组件

1 . ChannelHandlerContext 通道处理者上下文对象 :

① 保存信息 : ChannelHandlerContext 类中保存与 Channel 通道 , ChannelHandler 通道处理者 , 相关的信息 ;

② 关联处理者 : ChannelHandlerContext 内部维护了一个 ChannelHandler 对象 ;

2 . 相关组件对应关系 :

① 整体脉络 : ChnnelPipeline 本质是双向链表 , 每个元素都是一个 ChannelHandlerContext 对象 , 每个 ChannelHandlerContext 都对应关联了一个 ChannelHandler 对象 ;

② ChnnelPipeline 与 ChannelHandlerContext 对应关系 :

1

个 ChannelPipeline 对应多个 ChannelHandlerContext ;

③ ChannelHandlerContext 与 ChannelHandler 对应关系 :

1:1

;

3 . ChannelHandlerContext 常用方法 :

① 获取通道 : 在 ChannelHandlerContext 接口中定义的方法 ;

Channel channel();

② 获取管道 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelPipeline pipeline();

③ 获取处理器 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelHandler handler();

④ 刷新数据 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelHandlerContext flush();

⑤ 关闭通道 : 在 ChannelOutboundInvoker 接口中定义的方法 ;

ChannelFuture close();

⑥ 写出数据 : 在 ChannelOutboundInvoker 接口中定义的方法 , 作用是将数据写出到 ChannelPipeline 管道中 ;

ChannelFuture writeAndFlush(Object msg);二、 ChannelHandlerContext 组件 debug 调试

1 . 代码及断点 : 运行 【Netty】使用 Netty 开发 HTTP 服务器 | 三、 HTTP 服务器代码实现 中的 HTTP 服务器代码 , 在用户自定义的 HTTPServerHandler 类的 channelRead0 方法中打断点 , 查看该方法的 ChannelHandlerContext ctx 参数信息 ;

这里只列举部分代码 , 在获取 channelRead0 方法的代码处打上断点 , 查看 ChannelHandlerContext 类型参数信息 ;

public class HTTPServerHandler extends SimpleChannelInboundHandler { @Override protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception { if(msg instanceof HttpRequest){ //判断该 HttpObject msg 参数是否是 Http 请求 // 在此处打断点, 查看 ChannelHandlerContext ctx 参数的信息 System.out.println(ctx.channel().remoteAddress() + " 客户端请求数据 ... "); // ... } } //... }

2 . 运行程序进入断点 :

① debug 运行服务器程序 :

② 浏览器访问 : 访问 http://127.0.0.1:8888 地址 , 目前卡在断点 , 无法成功获取 HTTP 资源 ;

③ 服务器端进入断点 : 可以查看 ChannelHandlerContext ctx 参数的具体信息 ;

三、 ChannelHandlerContext 组件 debug 调试结果分析

1 . ChannelHandlerContext 接口的具体实现类型 : 在 重写的 SimpleChannelInboundHandler 的 protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception 方法中 , ctx 参数的实际类型是 DefaultChannelHandlerContext ;

2 . ChannelHandlerContext 双向链表相关分析 :

① 双向链表元素位置 : 该 ChannelHandlerContext ctx 是 ChannelPipeline 的 ChannelHandlerContext 类型双向链表的一部分 , 由上一篇博客 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 ) | 三、 Pipeline / ChannelPipeline 管道内双向链表分析 , 分析可知 , 该 ctx 是整个双向链表的第

3

个元素 ;

② 双向链表前一个元素 : HttpServerCodec 服务器编解码器 , 用于 HTTP 协议数据的编码 , 解码处理 ;

③ 双向链表后一个元素 : 后面就是双向链表尾部元素 , 是 DefaultChannelPipeline ;

④ 双向链表 : DefaultChannelPipeline ChannelInitializer HttpServerCodec SimpleChannelInboundHandler ( 自定义派生类 ) DefaultChannelPipeline

贴一张没有标注的图 : 仅做参考 ;



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭